package com.marmot.cloud.framework.utils;

import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.collection.IterUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.io.resource.ResourceUtil;
import cn.hutool.core.io.watch.WatchUtil;
import cn.hutool.core.net.NetUtil;
import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.core.util.*;
import cn.hutool.http.HtmlUtil;
import cn.hutool.http.HttpUtil;
import cn.hutool.system.SystemUtil;

import java.math.BigDecimal;
import java.util.Iterator;

/**
 * 【快捷工具】U快速常用工具集成支持类(支持链式操作)
 * 
 * <p>
 * 说明：提供了Array、Bean、Captcha、Charset、ClassLoader、Class、Collection、Cookie、Date、Email、Escape、File、Hash、Hex、Idcard、Image、Io、Iter、Net、Number、Random、Reflect、Regex、Resource、String、System、Thread、Type、URL、Watch、Xml、Zip的等工具。<br>
 * <br>
 * 例子：<br>
 * <code>
 * Log.i("测试U工具方法");<br>
 * Log.i(U.Array.hasNull(new ArrayList<>()));
 * </code>
 * </p>
 * 
 * @author shenpeng
 *
 */
public class U {


	/**
	 * 【工具】数组工具类
	 * 
	 * <p>
	 * 说明：提供了常用的判断、拷贝、追加、分割、切分、连接、添加、移除、反转、取最大值、取最小值等功能。
	 * </p>
	 * 
	 * @author shenpeng
	 *
	 */
	public class Array extends ArrayUtil {
	}

	/**
	 * 【工具】JavaBean工具类
	 * 
	 * <p>
	 * 说明：提供了常用的转换、拷贝、反射、判断等功能。
	 * </p>
	 * 
	 * @author shenpeng
	 *
	 */
	public class Bean extends BeanUtil {
	}

	/**
	 * 【工具】验证码工具类
	 * <p>
	 * 说明：提供了图片随机验证码工具等功能。
	 * </p>
	 * 
	 * @author shenpeng
	 * 
	 */
	public class Captcha extends CaptchaUtil {
	}

	/**
	 * 【工具】字符集工具类
	 * 
	 * <p>
	 * 说明：提供了常用的常量、转换、默认字符编码等功能。
	 * </p>
	 * 
	 * @author shenpeng
	 *
	 */
	public class Charset extends CharsetUtil {
	}

	/**
	 * 【工具】类加载器工具类
	 * 
	 * <p>
	 * 说明：提供了加载器{@link ClassLoader}封装加载、判断等功能。
	 * </p>
	 * 
	 * @author shenpeng
	 */
	public class ClassLoader extends ClassLoaderUtil {
	}

	/**
	 * 【工具】类工具类 <br>
	 * 
	 * <p>
	 * 说明：提供了常用类的扫描、加载、资源、实例化、包、方法、类型、参数、判断等功能。
	 * </p>
	 * 
	 * @author shenpeng
	 *
	 */
	public class Class extends ClassUtil {
	}

	/**
	 * 【工具】集合相关工具类，包括Array、Map、List
	 * 
	 * <p>
	 * 说明：提供了常用集合类的并集、交集、差集、连接、Map、List、拷贝、截取、过滤、排序、循环、判断等功能。
	 * </p>
	 * 
	 * @author shenpeng
	 * 
	 */
	public class Collection extends CollectionUtil {
	}

	/**
	 * 【工具】日期时间工具类
	 * <p>
	 * 说明：提供了常用 日期、时间、年月日时分秒、上下午、当前年月日、获取、解析、开始结束时间、比较、偏移、格式化等功能。
	 * </p>
	 * 
	 * <pre>
	 * 例子： 
	 * Log.i("测试D工具方法"); 
	 * Log.i(U.Date.format(new Date(), DatePattern.NORM_TIME_PATTERN));
	 * </pre>
	 * 
	 * @author shenpeng
	 */
	public class Date extends DateUtil {
	}
	
	/**
	 * 【工具】转义和反转义工具类
	 * <p>
	 * 说明：提供了常用转义类的编码、解码、还原等功能。Escape / Unescape<br>
	 * escape采用ISO Latin字符集对指定的字符串进行编码。<br>
	 * 所有的空格符、标点符号、特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)。
	 * 
	 * </p>
	 * 
	 * @author shenpeng
	 */
	public class Escape extends EscapeUtil {
	}

	/**
	 * 【工具】文件工具类
	 * <p>
	 * 说明：提供了常用的文件目录的操作命令封装等功能。
	 * </p>
	 * 
	 * @author shenpeng
	 *
	 */
	public class File extends FileUtil {
	}

	/**
	 * 【工具】Hash算法工具类,推荐使用FNV1算法<br>
	 * 
	 * <p>
	 * 说明：提供了常用的Hash算法等功能。
	 * </p>
	 * 
	 * @author shenpeng
	 */
	public class Hash extends HashUtil {
	}

	/**
	 * 【工具】十六进制工具类
	 * 说明（简写为hex或下标16）在数学中是一种逢16进1的进位制，一般用数字0到9和字母A到F表示（其中:A~F即10~15）。<br>
	 * 例如十进制数57，在二进制写作111001，在16进制写作39。<br>
	 * 像java,c这样的语言为了区分十六进制和十进制数值,会在十六进制数的前面加上 0x,比如0x20是十进制的32,而不是十进制的20<br>
	 * 
	 * @author shenpeng
	 *
	 */
	public class Hex extends HexUtil {
	}

	/**
	 * 【工具】HTML工具类
	 * <p>
	 * 说明：提供了常用的对Html文本操作的功能，移除标签、过滤、编码等功能。
	 * </p>
	 * 
	 * @author shenpeng
	 * 
	 */
	public class Html extends HtmlUtil {
	}

	/**
	 * 【工具】Http请求工具类
	 * <p>
	 * 说明：提供了常用Http的工具方法，字符编解码、post、get、下载、url参数、内容编码、流支持等功能。
	 * </p>
	 * 
	 * @author shenpeng
	 */
	public class Http extends HttpUtil {
	}

	/**
	 * 【工具】身份证相关工具类<br>
	 * 
	 * <p>
	 * 说明：提供了常用实现从15位~18位的身份证号码转换，校验中国大陆公民身份证、香港居民身份证、澳门身份证和台湾身份证等功能。
	 * </p>
	 * 
	 * @author shenpeng
	 */
	public class Idcard extends IdcardUtil {
	}

	/**
	 * 【工具】IO工具类<br>
	 * <p>
	 * 说明：IO工具类只是辅助流的读写，并不负责关闭流。原因是流可能被多次读写，读写关闭后容易造成问题。
	 * </p>
	 * 
	 * @author shenpeng
	 *
	 */
	public class Io extends IoUtil {
	}

	/**
	 * 【工具】{@link Iterable} 和 {@link Iterator} 相关工具类
	 * 
	 * @author shenpeng
	 * 
	 */
	public class Iter extends IterUtil {
	}

	/**
	 * 【工具】网络相关工具类
	 * <p>
	 * 说明：基础网络相关操作工具，提供了常用IP地址、端口、套接字、Mac地址、网卡等功能。
	 * </p>
	 * 
	 * @author shenpeng
	 *
	 */
	public class Net extends NetUtil {
	}

	/**
	 * 【工具】数字工具类<br>
	 * <p>
	 * 说明：对于精确值计算应该使用 {@link BigDecimal}<br>
	 * JDK7中<strong>BigDecimal(double val)</strong>构造方法的结果有一定的不可预知性，例如：
	 * 
	 * <pre>
	 * new BigDecimal(0.1)
	 * </pre>
	 * 
	 * 表示的不是<strong>0.1</strong>而是<strong>0.1000000000000000055511151231257827021181583404541015625</strong>
	 * 
	 * <p>
	 * 这是因为0.1无法准确的表示为double。因此应该使用<strong>new BigDecimal(String)</strong>。
	 * </p>
	 * 
	 * 
	 * @author shenpeng
	 *
	 */
	public class Number extends NumberUtil {
	}

	/**
	 * 【工具】随机数/字符串工具类
	 * <p>
	 * 说明：提供了常用随机整数、字节码、集合、字符串、数字、UUID等功能。
	 * </p>
	 * 
	 * @author shenpeng
	 *
	 */
	public class Random extends RandomUtil {
	}

	/**
	 * 【工具】反射工具类
	 * <p>
	 * 说明：提供了反射常用构造、方法、字段、初始化、比较、静态方法等功能。
	 * </p>
	 * 
	 * @author shenpeng
	 */
	public class Reflect extends ReflectUtil {
	}

	/**
	 * 【工具】ClassPath资源工具类
	 * 
	 * @author shenpeng
	 *
	 */
	public class Resource extends ResourceUtil {
	}

	/**
	 * 【工具】字符串工具类
	 * <p>
	 * 说明：提供了常用的判断、截取、拼接、移除、查找、转换大小写、分割、格式化等功能。
	 * </p>
	 * 
	 * @author shenpeng
	 *
	 */
	public class String extends StrUtil {
	}

	/**
	 * Java的System类封装工具类。
	 * 
	 * @author shenpeng
	 *
	 */
	public class System extends SystemUtil {
	}

	/**
	 * 【工具】线程池工具
	 * <p>
	 * 说明：提供了常用的新建、获取、执行、销毁等功能。
	 * </p>
	 * 
	 * @author shenpeng
	 */
	public class Thread extends ThreadUtil {
	}

	/**
	 * 【工具】针对 {@link Type} 的工具类封装
	 * <p>
	 * 说明：提供了常用的获取字段、行、方法、类、元素等得类型等功能。
	 * </p>
	 * 
	 * @author shenpeng
	 */
	public class Type extends TypeUtil {
	}

	/**
	 * 【工具】统一资源定位符相关工具类
	 * <p>
	 * 说明：提供了常用URL地址的获取、格式化、编解码、转换、判断等功能。
	 * </p>
	 * 
	 * @author shenpeng
	 * 
	 */
	public class URL extends URLUtil {
	}

	/**
	 * 【工具】监听工具类<br>
	 * <p>
	 * 说明：主要负责文件监听器的快捷创建
	 * </p>
	 * 
	 * @author shenpeng
	 * 
	 */
	public class Watch extends WatchUtil {
	}

	/**
	 * 【工具】XML工具类<br>
	 * 
	 * <p>
	 * 说明：此工具使用w3c dom工具，不需要依赖第三方包。工具类封装了XML文档的创建、读取、写出和部分XML操作。<br>
	 * </p>
	 * 
	 * @author shenpeng
	 *
	 */
	public class Xml extends XmlUtil {
	}

	/**
	 * 【工具】压缩工具类
	 * 
	 * <p>
	 * 说明：提供了zip、gzip常用打包、压缩、解压缩、等功能。
	 * </p>
	 * 
	 * @author shenpeng
	 *
	 */
	public class Zip extends ZipUtil {
	}

}
